ทดลองใช้ ALB ของ EC2 เพื่อแบ่งการเชื่อมต่อ
สวัสดีครับ ผม ต้า ครับ
วันนี้ผมจะทดลองลองใช้ ALB (Application Load Balancer) ที่เป็นตัวช่วย
ในการปรับการเชื่อมต่อไปยังแต่ละ Availability Zone ให้เท่าๆกันนะครับ
โดยในครั้งนี้ผมจะทดลองสร้างสภาพแวดล้อมตามแผนภาพด้านบนนะครับ งั้นก็ไปลุยกันเลยนะครับ
.
.
.
.
ขั้นเตรียมการ
1.สร้าง VPC
ในขั้นตอนแรกเราจะมาสร้าง VPC ให้ได้ตามรูปด้านบนกันก่อนนะครับ
โดยวิธีการสร้าง VPC สามารถดูได้ที่ลิ้งค์ด้านล่างนี้ครับ↓↓↓
แต่ให้ตั้งค่าตามด้านล่างนี้นะครับ
การสร้าง VPC Beginner
Name tag auto-generation:supanut-test
(ตั้งชื่อของ VPC อะไรก็ได้)
IPv4 CIDR block:192.168.0.0/16
Availability Zones (AZs) (2):1a
1b
Number of public subnets:2
Number of private subnets:0
Public subnet CIDR block in ap-southeast-1a:192.168.1.0/24
Public subnet CIDR block in ap-southeast-1b:192.168.2.0/24
NAT gateways:None
VPC endpointsInfo:None
Enable DNS hostnames: ✅
Enable DNS resolution: ✅
ตั้งค่าเสร็จแล้วก็กด Create VPC
ได้เลยครับ
ตั้งค่า Subnet
หลังจากนั้นให้ไปที่ฟังก์ชันSubnets
แล้วให้ตั้งค่า Public Subnet ทั้ง public1
และ public2
ให้ ✅Enable auto-assign public IPv4 address
เราสามารดูวิธีตั้งค่า Public Subnet ได้ตามบทความด้านล่างนี้ครับ↓↓↓
2.สร้าง EC2 Instance
โดยขั้นตอนต่อไปเราจะสร้าง EC2 Instance สำหรับโซน 1a และหลังจากนั้นให้เชื่อมต่อ PuTTY ด้วย
โดยสามารถดูวิธีการสร้างและเชื่อมต่อได้ที่ลิ้งค์ด้านล่างนี้↓↓↓
แต่ให้ตั้งค่าตามด้านล่างนี้นะครับ (นอกนั้นให้เหมือนในบทความได้เลยครับ)
【Update】วิธีติดตั้ง Amazon Linux 2 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY
Name:supanut-test-ec2-1
(ตั้งชื่อให้สอดคล้องกับที่ทำมา)
VPC:เลือก VPC ที่เราสร้างขึ้นมาในขั้นตอนที่แล้ว
Subnet: public1 (ตามแผนภาพที่ร่างไว้↑↑↑) ดูให้ดีๆนะครับ
Auto-assign public IP:Enable
Security group name:supanut-test-ec2
(จะลองให้ทั้ง 2 Instance ใช้ Security group เดียวกัน)
Description:supanut-test-ec2
Security group rule 1
Type:ssh
Source type:My IP
Security group rule 2
Type:HTTP
Source type:Anywhere
เสร็จแล้วกดLaunch instance
เลยครับ
หลังจากนั้นเราสามารถมาเช็คข้อมูลใน หน้า instance ได้ จะเห็นว่า VPC กับ Subnet จะเปลี่ยนไปตามที่เราตั้งค่า
แล้วให้เราเชื่อมต่อ PuTTY ตามบทความด้านบนทุกอย่างเลยครับ
หลังจากนั้นใช้เราใช้คำสั่งนี้เพื่อเปลี่ยน Time zone เป็นเวลาไทยครับ
ln -sf /usr/share/zoneinfo/Asia/Bangkok /etc/localtime
แล้วใช้คำสั่งนี้เพื่อเช็คดูเวลาได้ หากถูกต้องเวลาจะเป็น +07
ครับ
date
3.ตั้งค่า EC2 Instance
คราวนี้จะต้องมาติดตั้ง PHP 8.0 และ Apache เพื่อใช้ในการทดสอบในขั้นต่อไปครับ
โดยวิธีการติดตั้งสามารถดูได้ที่ลิ้งค์ด้านล่างนี้↓↓↓
แล้วเรียกใช้คำสั่งนี้ เพื่อไปยัง address /var/www/html/
cd /var/www/html/
แล้วเรียกใช้คำสั่งนี้ เพื่อสร้างไฟล์ index.php
vi index.php
กดปุ่ม i
เพื่อเข้าสู่โหมดเขียน แล้วเพิ่มคำนี้ลงไป
<?php phpinfo();
แล้วพิม :x
แล้วกด Enter เพื่อ save file
หลังจากนั้นให้เรามาที่ตัว Instance ที่เราสร้าง
แล้ว Copy Public IPv4 address
ของ Instance ไปเปิดใน Browser
(หากเปิดไม่ได้ ให้ลองพิมพ์ http://xxx/index.php ไปเปิดใน Browser แทน (ตรง xxx ให้ใส่ Public IPv4 address
ของ Instance))
เมื่อเปิดแล้ว เราจะได้หน้าแบบนี้
4.ใช้ AMI Copy Instance
หลังจากที่เราตั้งค่า Instance เสร็จแล้ว เราจะมาใช้ฟังก์ชันของ EC2 ที่เรียกว่า AMIs
ในการสร้าง Copy ของ Instance เพื่อย่นเวลาในการตั้งค่าต่างๆภายใน
โดยสามารถดูวิธีการสร้างและเชื่อมต่อได้ที่ลิ้งค์ด้านล่างนี้↓↓↓
แต่ให้ตั้งค่าตามด้านล่างนี้นะครับ
การใช้ AMI เพื่อ Copy ข้อมูลของ EC2 Instance
Name:supanut-test-ec2-2
(ตั้งชื่อให้สอดคล้องกับที่ทำมา)
VPC:เลือก VPC ที่เราสร้างขึ้นมาในขั้นตอนที่แล้ว
Subnet: public2 (ตามแผนภาพที่ร่างไว้↑↑↑) ดูให้ดีๆนะครับ
Auto-assign public IP:Enable
Firewall (security groups):◎Select existing security group
Security group name:supanut-test-ec2
(เลือกอันที่เราสร้างในขั้นตอนที่แล้ว)
Description:supanut-test-ec2
เมื่อเสร็จทุกอย่างแล้วก็ไปขั้นตอนต่อไปได้เลยครับ
ขั้นลงมือจริง
5.สร้าง ALB
สร้าง Target Group
ใน Service EC2 ให้เราเลือก Target Group
ที่อยู่ใน Load Balancing
แล้วกดปุ่ม Create target group
ที่อยู่ด้านขวา (ปุ่มส้มๆ)
แล้วตั้งค่าตามนี้ครับ
Choose a target type:◎Instances
Target group name:supanut-test-target-group
Protocol: http
Port: 80
VPC:เลือก VPC ที่เราสร้างขึ้นมาในขั้นตอนที่แล้ว
Protocol version: HTTP1
Health checks: HTTP
/
เสร็จแล้วกดNext
เลยครับ
หลังจากนั้นให้เราติ๊ก✅ Instance ที่เราจะใส่ใน Target Group
แล้วกด Include as pending below
จะเห็นว่า Instance เราถูกเลือกแล้ว
ให้กดปุ่ม Create target group
ได้เลยครับ
สร้าง Security Group สำหรับ Load Balancers
ไปยังหน้า Security Groups ใน EC2 Service
กดปุ่มสีส้มๆ Create security group
ตั้งค่าตามนี้ครับ
Security group name: supanut-test-alb
(ตั้งชื่อให้สอดคล้องกับที่ทำมา)
Description: supanut-test-alb
(ตั้งชื่อให้สอดคล้องกับที่ทำมา)
VPC:เลือก VPC ที่เราสร้างขึ้นมาในขั้นตอนที่แล้ว
Inbound rules
กด Add rule
Type: HTTP
Source: Anywhere-IPv4
เสร็จแล้วกด Create security group
สร้าง Load Balancers
หลังจากสร้าง Target gruop เสร็จแล้ว ให้เราไปที่ Load Balancers
ต่อได้เลยครับ
หลังจากนั้นกดปุ่ม Create Load Balancer
ครับ
เลือก Create
Application Load Balancer ครับ
Load balancer name: supanut-test-alb
Scheme:◎Internet-facing
IP address type:◎IPv4
VPC:เลือก VPC ที่เราสร้างขึ้นมาในขั้นตอนที่แล้ว
Security Group: supanut-test-alb
Mappings:✅ap-southeast-1a
✅ap-southeast-1b
Default action: เลือก Target Group ที่สร้าง
เสร็จแล้วกดปุ่ม Create load balancer
เลยครับ
6.ทดสอบต่างๆ
อย่างแรกให้เรากลับไปเปิด PuTTY แล้ว เชื่อมต่อกับทั้ง 2 Instance ที่เราสร้างมา (เชื่อมผ่าน Public IPv4 address)
แล้วเข้า root mode sudo su -
แล้วเรียกใช้คำสั่งนี้ครับ
tail -f /var/log/httpd/access_log
เราจะเห็นว่ามีการใช้คำสั่ง ELB-HealthChecker
เกิดขึ้นกับทั้ง 2 Instance
ซึ่งนี่คือคำสั่งจาก ALB ที่จะเช็คว่า Instance นี้สามารถใช้งานได้ปกติไหม
โดยจะเช็คทุกๆประมาณ 5 วินาที (5 วินาทีคือค่า Default สามารถเปลี่ยนได้ในการตั้งค่าหน้า Target group)
คราวนี้ให้เรามาที่หน้า Load Balancers
ที่อยู่ใน Load Balancing
จากนั้นให้เราเลือก ✅Load Balancer แล้วกดดู Desciption
ให้เรา Copy DNS name
แล้วนำไปเปิดใน Browser
จะเห็นว่าเราจะได้หน้าเว็บเดียวกับที่เปิดผ่าน ตัว Instance ทั้ง 2
แล้วเมื่อกด Refresh หน้าเว็บ(ประมาณ 1-3 ครั้ง)จะเห็นว่า เลข IP ตรง System การเปลี่ยนแปลง
นั่นเป็นเพราะว่า AMI ช่วยแบ่งการเชื่อมต่อที่เข้ามา ไปให้กับ ทั้ง 2 Instance ในปริมาณที่เท่าๆกัน
และเมื่อเรากลับไปดู log ใน PuTTY จะพบว่า มี Log การเชื่อมต่อเกิดขึ้น
โดยเมื่อเชื่อมต่อเข้า Instance ใด ก็จะมี log ขึ้นที่ฝั่งนั้น
โอเคครับ ในขั้นต่อไปเราจะมาลองปิดการใช้งาน Apache (httpd) ที่ทำงานอยู่บน EC2 ข้างนึงดูกันครับว่าจะเกิดอะไรขึ้น
ก่อนอื่นให้เราใช้คำสั่งต่อไปนี้ที่ PuTTY ข้างนึงนะครับ (โดยผมจะใช้กับ 1b) ((อยากออกจากการดู Log กด Ctrl+C))
systemctl stop httpd
จากนั้นลอง Refresh หน้าเว็บดู จะพบว่ามีบางครั้งที่จะเข้าไม่ได้
แต่พอผ่านไปสักพักการเข้าใช้เว็บไซต์จะเข้าได้ปกติเหมือนเดิม
จากนั้นให้เรากลับไปที่ EC2 ไปดูในส่วน Target group จะเห็นว่ามี 1 รายการที่ Unhealthy
นั่นคือรายการที่เราปิดการเชื่อมต่อไป
โอเค ที่นี้เราทราบแล้วว่า ALB สามารถกรองการเชื่อมต่อไปในทางที่สามารถเชื่อมต่อได้
งั้นเราจะลองเปิดเซิร์ฟเวอร์ดูอีกครั้ง เพื่อดูว่าการเชื่อมต่อจะเป็นยังไง
ให้เราใช้คำสั่ง
systemctl start httpd
แล้วเข้าไปดู Log กัน
tail -f /var/log/httpd/access_log
จากนั้นเมื่อเรารออีกสักพักจะพบว่า Target Group กลับมา Healthy ทั้ง 2 เลย
แล้วเมื่อเรากลับไปเข้าเว็บไซต์ผ่าน DNS name
ของ Target Group ก็จะพบว่าเว็บไซต์สามารถเชื่อมต่อเข้าได้ทั้ง 2 Instance แล้ว
เมื่อเราทดสอบเสร็จ ให้เราไปตั้งค่า Security Group ของ Instance(ในที่นี้ของผมคือ supanut-test-ec2
)
ให้เราเปลี่ยนในส่วนของ source ของ HTTP เป็น IP ของ VPC(ในที่นี้ของผมเป็น 192.168.0.0/16
)
เพียงแค่นี้เราก็จะสามารถป้องกันการเชื่อมต่อจากภายนอกที่ผ่านมาทาง IP ของ Instance ได้
และทำให้DNS name
ของ Target Group เป็นประตูเดียวที่สามารถเข้าใช้เว็บไซต์จากภายนอกได้
ทำไม Load Balancer ของ AWS ถึงน่าใช้
ALB(Application Load Balancer) หรือที่รู้จักกันในชื่อทั่วๆไปว่า Load Balancer
การที่เราจะซื้อ Load Balancer Hardware มาใช้เอง(On-premises) 1 เครื่องมีราคาสูงมาก
(เกิน 100,000 บาท)
จึ่งไม่ใช่สินค้าที่เราจะสามารถตัดสินใจซื้อได้ง่ายๆ
แต่หากใช้ Load Balancer ของ AWS ราคาที่ต้องจ่ายจะคิดจากจำนวนชั่วโมงที่ใช้
ทำให้ง่ายต่อการตัดสินใจที่จะลองใช้ โดยในช่วงที่มีการ access เกิดขึ้นน้อย
จะมีค่าใช้จ่ายเริ่มต้นอยู่ที่เดือนละ 18 USD (ประมาณ 700 บาท) โดยเทียบจากโซน SingaporeRegion
หากสนใจรายละเอียดเพิ่มเติมสามารถดูได้ที่ลิ้งค์ด้านล่างนี้
https://aws.amazon.com/th/elasticloadbalancing/pricing/
โดยเราจะขออธิบายเกี่ยวกับคำศัพท์ในเว็บเผื่อจะทำให้คุณเข้าใจมากขึ้นเกี่ยวกับ Load Balancer ของ AWS
อธิบายเกี่ยวกับคำศัพท์
・ELB (Elastic Load Balancig)
ชื่อ Service ของ AWS
・ALB(Application Load Balancer)
Load Balancer ชนิดนึงของ ELB ถูกออกแบบมาให้ใช้กับเว็บไซต์
・นอกจากนี้ ELB ยังมี「Gateway Load Balancer」「Network Load Balancer」ที่เป็น
Load Balancer ชนิดอื่นอยู่อีก
สรุป
จากการทดลองทำให้เรารู้ว่าเจ้าตัว ALB นี้จะมีประโยชน์เมื่อ เราใช้ Instance 2 ตัวขึ้นไปในการเชื่อมต่อ
ALB จะแบ่งการเชื่อมต่อจาก Traffic ไปยังแต่ละ Instance ทำให้เมื่อ Instance 1 ตัว เกิดการอัพเดท
หรือเซิร์ฟเวอร์มีปัญหาไม่สามารถเชื่อมต่อได้ ALB จะปรับการเชื่อมต่อไปยัง Instance อื่นที่ยังสามารถใช้งานได้โดยอัตโนมัติ
และเมื่อ Instance นั้นกลับมาใช้งานได้ ALB ก็จะปรับให้กลับให้สามารถเชื่อมต่อได้โดยอัตโนมัติเช่นกันครับ
บทความที่เกี่ยวข้อง
・Amazon ALB (Application Load Balancer) คืออะไร? การแนะนำฟังก์ชันล่าสุดของ AWS ในปี 2022
・ทำความรู้จักกับ ALB, NLB, GLB ของ ELB(Elastic Load Balancing) ในเบื้องต้น
・
【Update】วิธีติดตั้ง Amazon Linux 2 บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTY
・วิธีแก้ปัญหาการเชื่อมต่อ Security Group
・การสร้าง VPC Beginner และเชื่อมต่อกับ EC2 Instance
・การใช้ AMI เพื่อ Copy ข้อมูลของ EC2 Instance
・Elastic Load Balancing Official Website